Valores missing, outlier y correlaciones

En este notebook se realiza el estudio y preprocesamiento de las variables numéricas y categoricas. Se realizarán los siguientes pasos:

1. Cambio de tipos de variables
2. Separación en train y test
3. Análisis de cada variable con gráficos descriptivos
4. Para variables numericas: correlaciones de pearnson, estudio de outliers y estudio de valores missing
5. Para variables categoricas: relleno de valores missing, estudio de correlaciones con vCramer

Para los valores outlier por columnas, se tendrá en cuenta los gráficos:

Destro del tratamiento de los valores missing, se elegirá alguno de los siguientes métodos:

Importo librerías

Funciones

Buenas prácticas

Voy guardando las funciones que están automatizadas y pienso que me van a servir en otros proyectos en un funciones_auxiliares.py y lo importo:

Lectura de datos del preprocesado inicial

Lectura de los datos y cambio de tipos de variables

Separación en train y test estratificado

Visualización descriptiva de los datos

Veo el número de valores nulos por filas y por columnas

Distribución del resto de variables

- Tratamiento de las variables continuas

A continuación, se tratan los valores missing, las correlaciones de las vairbales continuas y los outlier

Tratamiento de outliers

Los valores outlier se pueden sustituir por la media, mediana, valores extremos (media+3std o media-3std). Tras el siguiente análisis, he decidido como primera iteración dejarlos sin sustituir. Una vez llegue al modelo puedo realizar iteraciones utilizando diferentes métodos para comprobar si mejora el modelo

Se puede observar que, en la variable int_rate los outlier tienen un mayor porcentaje de charged off (asciende de un 22% a un 38.49%)

Correlaciones

En algunos algoritmos, como los ensembling de árboles (xgboost, randomforest, lightgbm, catboost, ...) no es necesario eliminar colinealidad entre variables. En otros algoritmos como glm si es necesario eliminar la colinealidad

Decido en esta primera iteración, no eliminar correlaciones. Sin embargo, si finalmente aplico algún algoritmo que lo requiera, tendré que eliminar correlaciones

Tratamiento de valores nulos

¿Son todos los nulos de una clase de la variable objetivo? o tienen el mismo porcentaje de la variable objetivo?

Dependiendo del contexto donde procedan las variables, se podrán imputar de una manera u otra. Por ejemplo, valores nulos dentro de la variable número de cuentas bancarias puede significar que la persona no tiene cuentas bancarias, por lo que el valor conveniente para rellenar el nulo es cero.

En caso de no tener tanto contexto de las variables, es posible optar por diferentes técnicas y contrastar los resultados del modelo:

Opción 0:

Algunos algoritmos aceptan en su input valores missing

Opción 1:

eliminar todas las filas que tengan valores nulos. En nuestro dataset no es lo más optimo debido a que hay bastantes filas que les ocurre esta situación

Opción 2:

Imputar los valores missing por:

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.fillna.html

Decido rellenar todas las columnas continuas menos revol_util por el valor -99. De esta manera, diferencio los outlier del resto de la muestra poninendo un valor muy separado del resto de la variable. Se puede explorar el resultado del modelo utilizando diferentes métodos

Opción 3:

Vamos a usar KNNImputer para imputar los valores missing de la variable emp_length usando como regresoras todas las variables continuas

- Tratamiento de las variables categoricas

Para la correlacion de spearman es necesario convertir las variables categoricas en numericas y luego obtener la correlación

También está el coeficiente V-Cramer https://stackoverflow.com/questions/46498455/categorical-features-correlation

Tratamiento de valores nulos

En las variables categoricas, los valores nulos se suelen sustituir por una nueva clase: "sin valor" o por la moda

Guardado de la tabla